package com.gdust.hzx.utils;

import com.gdust.hzx.model.entity.system.SysUser;
import com.gdust.hzx.model.entity.user.UserInfo;

/**
 * ClassName: AuthContextUtil
 * Package: com.gdust.spzx.utils
 * Description:ThreadLocal中填充的变量属于当前线程，该变量对其他线程而言是隔离的，也就是说该变量是当前线程独有的变量
 * 重点：同一线程内变量的共享
 *
 * ThreadLocal 是 Java 提供的用于创建线程本地变量的类。每个线程可以通过 ThreadLocal 对象访问它自己独立的变量，这样多个线程之间互不干扰。
 * 使用 ThreadLocal 可以避免线程安全问题，尤其是在处理并发场景时。
 *
 * @Author syun
 * @Create 2024/11/5 21:48
 * @Version 1.0
 */
public class AuthContextUtil {
    /**
     *  创建一个 ThreadLocal 对象，用于存储 UserInfo 实例
     */
    private static final ThreadLocal<UserInfo> userInfoThreadLocal = new ThreadLocal<>() ;

    /**
     * 定义存储数据的静态方法，用于存储 UserInfo 实例
     * @param userInfo
     */
    public static void setUserInfo(UserInfo userInfo){
        userInfoThreadLocal.set(userInfo);
    }

    /**
     * 定义获取数据的方法，用于从当前线程中获取 UserInfo 对象
     * @return
     */
    public static UserInfo getUserInfo(){
        return userInfoThreadLocal.get();
    }

    /**
     * 定义一个静态方法，用于从当前线程中移除 UserInfo 对象，避免内存泄漏
     */
    public static void removeUserInfo(){
        userInfoThreadLocal.remove();
    }


    //*****************************************************************************************************


    /**
     * // 创建一个 ThreadLocal 对象，用于存储 SysUser 实例
     */
    private static final ThreadLocal<SysUser> threadLocal = new ThreadLocal<>();

    /**
     * // 定义一个静态方法，用于在当前线程中存储 SysUser 对象
     * @param sysUser
     */
    public static void set(SysUser sysUser){
        threadLocal.set(sysUser);
    }

    /**
     * // 定义一个静态方法，用于从当前线程中获取 SysUser 对象
     * @return
     */
    public static SysUser get(){
        return threadLocal.get();
    }

    /**
     * // 定义一个静态方法，用于从当前线程中移除 SysUser 对象，避免内存泄漏
     */
    public static void remove(){
        threadLocal.remove();
    }


}
